/*
 * $Id: XLIKey.h,v 1.2 2006-02-09 12:06:10 bacon Exp $
 */

#ifndef _XPP_XLI_XLIKEY_CLASS_
#define _XPP_XLI_XLIKEY_CLASS_

#include <xpp/xli/XLIPos.h>
#include <xp/bas/string.h>

namespace xpp
{
	namespace xli
	{

		class XLIKey: public XLIPos 
		{
		public:
			friend class XLI;
		
			XLIKey (const xp_char_t* str) 
			{
				xp_strxcpy (_data, xp_countof(_data), str);	
			}
		
			XLIKey (const xp_char_t* str, xp_size_t sz) 
			{
				xp_strxncpy (_data, xp_countof(_data), str, sz);	
			}
		
			XLIKey (const XLIKey& key) 
			{
				xp_strxcpy (_data, xp_countof(_data), key._data);	
			}
		
			XLIKey& operator= (const XLIKey& key) 
			{
				xp_strxcpy (_data, xp_countof(_data), key._data);	
				return *this;
			}
		
			bool operator== (const XLIKey& key) const
			{
				return xp_strcmp (_data, key._data) == 0;
			}
		
			bool operator== (const xp_char_t* str) const
			{
				return xp_strcmp (_data, str) == 0;
			}
		
			bool operator!= (const XLIKey& key) const
			{
				return xp_strcmp (_data, key._data) != 0;
			}
		
			bool operator!= (const xp_char_t* str) const
			{
				return xp_strcmp (_data, str) != 0;
			}
		
			const xp_char_t* data () const 
			{
				return (xp_char_t*)_data;
			}
		
			xp_char_t* data () 
			{
				return (xp_char_t*)_data;
			}
		
			void setData (const xp_char_t* str) 
			{
				xp_strxcpy (_data, xp_countof(_data), str);	
			}
		
			void setData (const xp_char_t* str, xp_size_t sz) 
			{
				xp_strxncpy (_data, xp_countof(_data), str, sz);
			}
		
			enum 
			{
				MAX_DATA_LEN = 64
			};
		
		protected: 
			// null-terminated xp_char_tacter string
			xp_char_t _data[MAX_DATA_LEN + 1];
		};
		
	}
}

#endif
